home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / BlitzC2P / c2p040only.ascii < prev    next >
Text File  |  1998-08-01  |  7KB  |  436 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; CLEARSCREEN version. Additional code by Paul West.
  5.  
  6. ; Non-clearscreen results:
  7.  
  8. ; 040/25 results:
  9.  
  10. ; 320x200 @49.65fps DoublePAL or 55.3fps PAL
  11. ; 320x256 @36.2fps DoublePAL or 42.5fps PAL
  12. ; 320x240 @39.5fps DoublePAL or 45.5fps PAL
  13.  
  14. ; 060/50 results:
  15.  
  16. ; 320x256 @50fps PAL
  17. ; 320x200 @66.1fps PAL
  18.  
  19. #c2pBPLX=320
  20. #c2pBPLY=256
  21. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  22.  
  23. #scrwidth=#c2pBPLX
  24. #scrheight=#c2pBPLY
  25. #screensize=#scrwidth*#scrheight
  26.  
  27. #clearscreento=$00000000
  28.  
  29. ; c2p1x1_8_c5_040
  30.  
  31. ; 110% on 040-25
  32.  
  33. Statement c2p040onlyinit{A.l,B.l}
  34.  
  35.   ;A.l=d0=Width.w
  36.   ;B.l=d1=Height.w
  37.  
  38. ; d0.w  chunkyx [chunky-pixels]
  39. ; d1.w  chunkyy [chunky-pixels]
  40. ; d3.w  scroffsy [screen-pixels]
  41.  
  42. c2p1x1_8_c5_040_init
  43.   LEA c2p_datanew(pc),a0
  44.   ANDI.l  #$ffff,d0
  45.   MULU.w  d0,d3
  46.   LSR.l #3,d3
  47.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  48.   MULU.w  d0,d1
  49.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  50. AsmExit
  51. End Statement
  52.  
  53. Statement c2p040only{A.l,B.l}
  54.  
  55.   MOVE.l  d0,a0 ; Chunky
  56.   MOVE.l  d1,a1 ; Planar
  57.  
  58. ; a0  c2pscreen
  59. ; a1  bitplanes
  60.  
  61. c2p1x1_8_c5_040
  62.   MOVEM.l a3-a6,-(a7)
  63.  
  64.   MOVEM.l a0-a1,-(a7)
  65.   LEA c2p_datanew,a0
  66.   LEA c2p_data,a1
  67.   MOVEQ #16-1,d0
  68. _c2pcopy: MOVE.l  (a0)+,(a1)+
  69.   DBF d0,_c2pcopy
  70.   MOVEM.l (a7)+,a0-a1
  71.   MOVE.l  a7,stackstore
  72.   MOVE.l  #clearscreento,a7
  73.   LEA c2p_data(pc),a2
  74.  
  75.   MOVE.l  c2p_pixels-c2p_data(a2),a3
  76.   ADD.l a0,a3
  77.  
  78.   ADD.w #c2pBPLSIZE,a1
  79.   ADD.l c2p_scroffs-c2p_data(a2),a1
  80.   MOVE.l  a1,a2
  81.   ADD.l #c2pBPLSIZE*4,a2
  82.  
  83.   MOVE.l  (a0),d0
  84.   MOVE.l  a7,(a0)+
  85.   MOVE.l  (a0),d1
  86.   MOVE.l  a7,(a0)+
  87.   MOVE.l  (a0),d2
  88.   MOVE.l  a7,(a0)+
  89.   MOVE.l  (a0),d3
  90.   MOVE.l  a7,(a0)+
  91.   MOVE.l  (a0),d4
  92.   MOVE.l  a7,(a0)+
  93.   MOVE.l  (a0),d5
  94.   MOVE.l  a7,(a0)+
  95.  
  96.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  97.   MOVE.w  d0,d4
  98.   SWAP  d4
  99.   MOVE.w  d4,d0
  100.   MOVE.w  d7,d4
  101.   MOVE.l  d5,d7
  102.   MOVE.w  d1,d5
  103.   SWAP  d5
  104.   MOVE.w  d5,d1
  105.   MOVE.w  d7,d5
  106.  
  107.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  108.   LSR.l #2,d7
  109.   EOR.l d0,d7
  110.   AND.l #$33333333,d7
  111.   EOR.l d7,d0
  112.   LSL.l #2,d7
  113.   EOR.l d7,d4
  114.   MOVE.l  d5,d7
  115.   LSR.l #2,d7
  116.   EOR.l d1,d7
  117.   AND.l #$33333333,d7
  118.   EOR.l d7,d1
  119.   LSL.l #2,d7
  120.   EOR.l d7,d5
  121.  
  122.   MOVE.l  (a0),a5
  123.   MOVE.l  a7,(a0)+
  124.   MOVE.l  (a0),a6
  125.   MOVE.l  a7,(a0)+
  126.  
  127.   EXG d4,a5
  128.   EXG d5,a6
  129.  
  130.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  131.   MOVE.w  d2,d4
  132.   SWAP  d4
  133.   MOVE.w  d4,d2
  134.   MOVE.w  d7,d4
  135.   MOVE.l  d5,d7
  136.   MOVE.w  d3,d5
  137.   SWAP  d5
  138.   MOVE.w  d5,d3
  139.   MOVE.w  d7,d5
  140.  
  141.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  142.   LSR.l #2,d7
  143.   EOR.l d2,d7
  144.   AND.l #$33333333,d7
  145.   EOR.l d7,d2
  146.   LSL.l #2,d7
  147.   EOR.l d7,d4
  148.   MOVE.l  d5,d7
  149.   LSR.l #2,d7
  150.   EOR.l d3,d7
  151.   AND.l #$33333333,d7
  152.   EOR.l d7,d3
  153.   LSL.l #2,d7
  154.   EOR.l d7,d5
  155.  
  156.   MOVE.l  d1,d7     ; Swap 4x1
  157.   LSR.l #4,d7
  158.   EOR.l d0,d7
  159.   AND.l #$0f0f0f0f,d7
  160.   EOR.l d7,d0
  161.   LSL.l #4,d7
  162.   EOR.l d7,d1
  163.   MOVE.l  d3,d7
  164.   LSR.l #4,d7
  165.   EOR.l d2,d7
  166.   AND.l #$0f0f0f0f,d7
  167.   EOR.l d7,d2
  168.   LSL.l #4,d7
  169.   EOR.l d7,d3
  170.  
  171.   BRA _start
  172. _x
  173.   MOVE.l  (a0),d0
  174.   MOVE.l  a7,(a0)+
  175.   MOVE.l  (a0),d1
  176.   MOVE.l  a7,(a0)+
  177.   MOVE.l  (a0),d2
  178.   MOVE.l  a7,(a0)+
  179.   MOVE.l  (a0),d3
  180.   MOVE.l  a7,(a0)+
  181.   MOVE.l  (a0),d4
  182.   MOVE.l  a7,(a0)+
  183.   MOVE.l  (a0),d5
  184.   MOVE.l  a7,(a0)+
  185.  
  186.   MOVE.l  a6,-c2pBPLSIZE(a1)
  187.  
  188.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  189.   MOVE.w  d0,d4
  190.   SWAP  d4
  191.   MOVE.w  d4,d0
  192.   MOVE.w  d7,d4
  193.   MOVE.l  d5,d7
  194.   MOVE.w  d1,d5
  195.   SWAP  d5
  196.   MOVE.w  d5,d1
  197.   MOVE.w  d7,d5
  198.  
  199.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  200.   LSR.l #2,d7
  201.   EOR.l d0,d7
  202.   AND.l #$33333333,d7
  203.   EOR.l d7,d0
  204.   LSL.l #2,d7
  205.   EOR.l d7,d4
  206.   MOVE.l  d5,d7
  207.   LSR.l #2,d7
  208.   EOR.l d1,d7
  209.   AND.l #$33333333,d7
  210.   EOR.l d7,d1
  211.   LSL.l #2,d7
  212.   EOR.l d7,d5
  213.  
  214.   MOVE.l  (a0),d7
  215.   MOVE.l  a7,(a0)+
  216.   MOVE.l  (a0),a6
  217.   MOVE.l  a7,(a0)+
  218.  
  219.   MOVE.l  a5,-c2pBPLSIZE(a2)
  220.  
  221.   MOVE.l  d7,a5
  222.   EXG d4,a5
  223.   EXG d5,a6
  224.  
  225.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  226.   MOVE.w  d2,d4
  227.   SWAP  d4
  228.   MOVE.w  d4,d2
  229.   MOVE.w  d7,d4
  230.   MOVE.l  d5,d7
  231.   MOVE.w  d3,d5
  232.   SWAP  d5
  233.   MOVE.w  d5,d3
  234.   MOVE.w  d7,d5
  235.  
  236.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  237.   MOVE.l  d6,(a2)+
  238.   LSR.l #2,d7
  239.   EOR.l d2,d7
  240.   AND.l #$33333333,d7
  241.   EOR.l d7,d2
  242.   LSL.l #2,d7
  243.   EOR.l d7,d4
  244.   MOVE.l  d5,d7
  245.   LSR.l #2,d7
  246.   EOR.l d3,d7
  247.   AND.l #$33333333,d7
  248.   EOR.l d7,d3
  249.   LSL.l #2,d7
  250.   EOR.l d7,d5
  251.  
  252.   MOVE.l  d1,d7     ; Swap 4x1
  253.   LSR.l #4,d7
  254.   EOR.l d0,d7
  255.   MOVE.l  a4,(a1)+
  256.   AND.l #$0f0f0f0f,d7
  257.   EOR.l d7,d0
  258.   LSL.l #4,d7
  259.   EOR.l d7,d1
  260.   MOVE.l  d3,d7
  261.   LSR.l #4,d7
  262.   EOR.l d2,d7
  263.   AND.l #$0f0f0f0f,d7
  264.   EOR.l d7,d2
  265.   LSL.l #4,d7
  266.   EOR.l d7,d3
  267. _start
  268.  
  269.   MOVE.l  d2,d7     ; Swap 8x2, part 1
  270.   LSR.l #8,d7
  271.   EOR.l d0,d7
  272.   AND.l #$00ff00ff,d7
  273.   EOR.l d7,d0
  274.   LSL.l #8,d7
  275.   EOR.l d7,d2
  276.   MOVE.l  d2,d7
  277.   LSR.l #1,d7     ; Swap 1x2, part 1
  278.   EOR.l d0,d7
  279.   AND.l #$55555555,d7
  280.   EOR.l d7,d0
  281.   MOVE.l  d0,c2pBPLSIZE*2(a2)
  282.   ADD.l d7,d7
  283.   EOR.l d7,d2
  284.   MOVE.l  d3,d7     ; Swap 8x2, part 2
  285.   LSR.l #8,d7
  286.   EOR.l d1,d7
  287.   AND.l #$00ff00ff,d7
  288.   EOR.l d7,d1
  289.   LSL.l #8,d7
  290.   EOR.l d7,d3
  291.   MOVE.l  d3,d7
  292.   LSR.l #1,d7     ; Swap 1x2, part 2
  293.   EOR.l d1,d7
  294.   AND.l #$55555555,d7
  295.   EOR.l d7,d1
  296.   MOVE.l  d1,c2pBPLSIZE*2(a1)
  297.   ADD.l d7,d7
  298.   EOR.l d7,d3
  299.  
  300.   MOVE.l  d5,d7
  301.   LSR.l #4,d7
  302.   EOR.l d4,d7
  303.   AND.l #$0f0f0f0f,d7
  304.   EOR.l d7,d4
  305.   LSL.l #4,d7
  306.   EOR.l d7,d5
  307.  
  308.   EXG d4,a5
  309.   EXG d5,a6
  310.  
  311.   MOVE.l  d5,d7
  312.   LSR.l #4,d7
  313.   EOR.l d4,d7
  314.   AND.l #$0f0f0f0f,d7
  315.   EOR.l d7,d4
  316.   LSL.l #4,d7
  317.   EOR.l d7,d5
  318.  
  319.   MOVE.l  a5,d0
  320.   MOVE.l  a6,d1
  321.   MOVE.l  d2,c2pBPLSIZE(a2)
  322.  
  323.  
  324.   MOVE.l  d0,d7     ; Swap 8x2, part 3
  325.   LSR.l #8,d7
  326.   EOR.l d4,d7
  327.   AND.l #$00ff00ff,d7
  328.   EOR.l d7,d4
  329.   LSL.l #8,d7
  330.   EOR.l d7,d0
  331.   MOVE.l  d0,d7
  332.   LSR.l #1,d7     ; Swap 1x2, part 3
  333.   EOR.l d4,d7
  334.   AND.l #$55555555,d7
  335.   EOR.l d7,d4
  336.   ADD.l d7,d7
  337.   EOR.l d7,d0
  338.   MOVE.l  d1,d7     ; Swap 8x2, part 4
  339.   LSR.l #8,d7
  340.   MOVE.l  d3,c2pBPLSIZE(a1)
  341.   EOR.l d5,d7
  342.   AND.l #$00ff00ff,d7
  343.   EOR.l d7,d5
  344.   LSL.l #8,d7
  345.   EOR.l d7,d1
  346.   MOVE.l  d1,d7
  347.   LSR.l #1,d7     ; Swap 1x2, part 4
  348.   EOR.l d5,d7
  349.   AND.l #$55555555,d7
  350.   EOR.l d7,d5
  351.   ADD.l d7,d7
  352.   EOR.l d7,d1
  353.  
  354.   MOVE.l  d0,a5
  355.   MOVE.l  d1,a6
  356.  
  357.   MOVE.l  d4,d6
  358.   MOVE.l  d5,a4
  359.  
  360.   CMP.l a0,a3
  361.   BNE _x
  362.  
  363.   MOVE.l  a6,-c2pBPLSIZE(a1)
  364.   MOVE.l  a5,-c2pBPLSIZE(a2)
  365.   MOVE.l  d6,(a2)+
  366.   MOVE.l  a4,(a1)+
  367.  
  368.   MOVE.l  stackstore(pc),a7
  369.   MOVEM.l (a7)+,a3-a6
  370. AsmExit
  371.  
  372.   Even4
  373. stackstore: Dc.l 0
  374. c2p_data
  375. c2p_scroffs: Dc.l 0
  376. c2p_pixels: Dc.l 0
  377.   Ds.l  16
  378.   Even4
  379. c2p_datanew
  380.   Ds.l  16
  381. End Statement
  382.  
  383.  
  384.  
  385.  
  386. .blitzprogram
  387. ; Setup
  388. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  389. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  390. InitPalette 0,256
  391. For c=0 To 255
  392.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  393. Next c
  394. AGAPalRGB 0,0,0,0,0
  395. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  396. Use Palette 0
  397. VWait 50
  398. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  399.  
  400. ; Put something into the chunky buffer so we can see it working
  401. GetReg a0,baseaddress1
  402. MOVE.l  #0,d0
  403. MOVE.l  #screensize-1,d1
  404. cloop
  405.   MOVE.b  d0,(a0)+
  406.   ADDQ.l  #1,d0
  407.   SUBQ.l  #1,d1
  408.   TST.l   d1
  409.   BLT     done
  410.   BRA     cloop
  411. done
  412.  
  413. ; Do the c2p test
  414. c2p040onlyinit{#scrwidth,#scrheight}
  415. VWait 20
  416. Forbid_
  417. VWait
  418. ResetTimer
  419. For time=1 To 800
  420.   c2p040only{baseaddress1,Bank(0)} ; Convert chunky to planar
  421. Next time
  422. t=Ticks
  423. VWait 2 : Permit_
  424. VWait 20
  425. FindScreen 0
  426. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  427. WindowOutput 0
  428. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  429. NPrint " "
  430. NPrint "Press mousebutton..."
  431. Free Screen 0
  432. MouseWait
  433. Free Window 0
  434. End
  435.  
  436.